﻿
#include"options.h"
extern pTec Thead;//定义指向教师的指针
extern pStu Shead;//定义指向学生的指针
//添加学生用户
pStu add_student(pStu Shead)
{
	if(NULL==Shead)//创建学生链表
	{//定义头节点
		Shead=(pStu)malloc(sizeof(Student));
		Shead->next=NULL;
	}
		pStu p = (pStu)malloc(sizeof(Student));
		p->data=getDatas(Shead);
		if(Shead->next==NULL)
		{
			Shead->next=p;
			p->next=NULL;
			return Shead;
		}
		pStu tail=Shead->next;
		for(;tail->next!=NULL;tail=tail->next)
		{}
		tail->next=p;
		p->next=NULL;
		puts("添加成功");
		sleep(2);
	return Shead;
}
//添加教师用户
pTec add_teacher(pTec Thead)
{
	if(NULL==Thead)//创建学生链表
	{//定义头节点
		Thead=(pTec)malloc(sizeof(Teacher));
		Thead->next=NULL;
	}
		pTec p = (pTec)malloc(sizeof(Teacher));
		p->data=getDatat(Thead);
		if(Thead->next==NULL)
		{
			Thead->next=p;
			p->next=NULL;
			return Thead;
		}
		pTec tail=Thead->next;
		for(;tail->next!=NULL;tail=tail->next)
		{}
		tail->next=p;
		p->next=NULL;
		puts("添加成功");
		sleep(2);
	return Thead;
}
//获取学生链表长度
int getStuLength(pStu Shead)
{
    int length=0;
	pStu temp=Shead->next;
	for(;temp!=NULL;temp=temp->next)
	{
		length++;
	}
	return length;
}
//删除学生
pStu del_student(pStu Shead)
{
    int index=0;
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无用户可删\n");
        sleep(2);
        return  Shead;
    }
    else
    {
        char input[10]="";
	    puts("请输入要删除的学生[姓名]");
	    scanf("%s",input);
	    pStu temp=Shead->next;
        for(;temp!=NULL;temp=temp->next)
	    	{   
	    	        index++;
	    		if(0==strcmp(temp->data.name,input))
	    			{
	    				if(1==index)//头删
	    				{
	    				    pStu current = Shead->next;
	                        Shead->next = current->next;
	                        free(current);
	                        puts("删除成功");
	                        sleep(2);
                            break;					
	    				}
	    				if(index==getStuLength(Shead))//尾删
	    				{
	    				   pStu front=Shead;
	                       for(;front->next->next!=NULL;front=front->next)
	                            {
	                            }//front->next->next==NULL
	                       pStu tail=front->next;
	                       front->next=NULL;
	                       free(tail);
	                       puts("删除成功");
	                       sleep(2);
	                       break;
	    				}
	    			     if(temp->next!=NULL)//任意位置删除
	    				{
	    	                pStu front;
	    	                int i;
	    	                for(front=Shead->next,i=1;i<index-1;front=front->next,i++)
	    	                {
	    	                }
	    	                pStu current=front->next;
	    	                front->next=current->next;
	    	                free(current);
	    	                puts("删除成功");
	    	                sleep(2);
	    	                break;
	    				}
	    	           }
	    	         
	    	         }
	    	        if(temp==NULL)
	    	        {
	    	              puts("无此人信息可删");
	    	              sleep(2);
	    	        }
	   }
	return Shead;
}
//获取教师链表长度
int getTecLength(pTec Thead)
{
    int length=0;
	pTec temp=Thead->next;
	for(;temp!=NULL;temp=temp->next)
	{
		length++;
	}
	return length;
}
//删除教师用户
pTec del_teacher(pTec Thead)
{
	int index=0;
    if(Thead==NULL||Thead->next==NULL)
    {
        printf("无用户可删\n");
        sleep(2);
        return  Thead;
    }
    else
    {
        char input[10]="";
	    puts("请输入要删除的教师[姓名]");
	    scanf("%s",input);
	    pTec temp=Thead->next;
        for(;temp!=NULL;temp=temp->next)
	    	{   
	    	        index++;
	    		if(0==strcmp(temp->data.name,input))
	    			{
	    				if(1==index)//头删
	    				{
	    				    pTec current = Thead->next;
	                        Thead->next = current->next;
	                        free(current);
	                        puts("删除成功");
	                        sleep(2);
                            break;					
	    				}
	    				if(index==getTecLength(Thead))//尾删
	    				{
	    				   pTec front=Thead;
	                       for(;front->next->next!=NULL;front=front->next)
	                            {
	                            }//front->next->next==NULL
	                       pTec tail=front->next;
	                       front->next=NULL;
	                       free(tail);
	                       puts("删除成功");
	                       sleep(2);
	                       break;
	    				}
	    			     if(temp->next!=NULL)//任意位置删除
	    				{
	    	                pTec front;
	    	                int i;
	    	                for(front=Thead->next,i=1;i<index-1;front=front->next,i++)
	    	                {
	    	                }
	    	                pTec current=front->next;
	    	                front->next=current->next;
	    	                free(current);
	    	                puts("删除成功");
	    	                sleep(2);
	    	                break;
	    				}
	    	           }
	    	         
	    	         }
	    	     if(temp==NULL)
	    	     {
	    	         puts("无此人信息可删");
	    	         sleep(2);
	    	     }
	   }
	return Thead;
}
//查看所有用户
void check_allusers(pStu Shead,pTec Thead)
{
	check_student(Shead);
	check_teacher(Thead);
	sleep(3);
	return ;
}
//查看学生用户
void check_student(pStu Shead)
{  
	if(Shead==NULL)
    {
        printf("没有学生用户\n");
        return;
    }
    if(Shead->next==NULL)
    {
        printf("没有学生用户\n");
        return;
    }
    pStu temp=Shead->next;
    puts("学生用户有：");
    int i=0;
    for (; temp!=NULL; temp=temp->next)
    {
        printf("%s\t",temp->data.name);
        ++i;
    }
    printf("\n共:%d人\n",i);   
	return ;
}
//查看教师用户
void check_teacher(pTec Thead)
{
    if(Thead==NULL)
    {
        printf("没有教师用户\n");
        return;
    }
    if(Thead->next==NULL)
    {
        printf("没有教师用户\n");
        return;
    }
    pTec temp=Thead->next;
    puts("教师用户有：");
    int i=0;
    for (; temp!=NULL; temp=temp->next)
    {
        printf("%s\t",temp->data.name);
        ++i;
    }
    printf("\n共:%d人\n",i);	     
	return ;
}
//获取学生数据
Account getDatas(pStu Shead)
{
	Account act;
	while (1)
	{
	    printf("请输入添加学生用户的[班级]:如SH16**\n");
		scanf("%s",act.id);   
		printf("请输入添加学生用户的[用户名]:\n");
		scanf("%s",act.name);
		char  *input=NULL;
		input=getpass("请输入添加学生用户的信息[密码]:");    //输入密码
		strcpy(act.passwd,input);
		
		if(SameOrNots(Shead,act)==isSame)
		{
			printf("用户名重复\n");
		}
		else
		{	
			puts("添加成功");
			return act;
		}
	}
	return act;
}
//学生信息查重
Same SameOrNots(pStu Shead,Account act)
{
	pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
		{
			if(0==strcmp(temp->data.name,act.name))
				{
					return isSame;
				}
		}
	if(temp==NULL)
		{
			return isDifferent;
		}
	return isSame;
}
//获取教师用户信息
Account getDatat(pTec Thead)
{
    Account act;
	while (1)
	{
	    printf("请输入添加教师用户管理的[班级]:如SH16**\n");
		scanf("%s",act.id);
		printf("请输入添加教师的[用户名]:\n");
		scanf("%s",act.name);
		char  *input=NULL;
		input=getpass("请输入添加教师用户的信息[密码]:");    //输入密码
		strcpy(act.passwd,input);
		
		if(SameOrNott(Thead,act)==isSame)
		{
			printf("用户名重复\n");
		}
		else
		{	
			puts("添加成功");
			return act;
		}
	}
	return act;
}
//教师用户查重
Same SameOrNott(pTec Thead,Account act)
{
    pTec temp=Thead->next;
    for(;temp!=NULL;temp=temp->next)
		{
			if(0==strcmp(temp->data.name,act.name))
				{
					return isSame;
				}
		}
	if(temp==NULL)
		{
			return isDifferent;
		}
	return isSame;    
}
